﻿#include<iostream>
using namespace std;

class Time
{
public:
	Time(int n)
		:_time(n)
	{
		cout << "Time" << endl;
	}

	void print()
	{
		cout << _time << endl;
	}
private:
	int _time;
};

class Data
{
public:
	Data(int a, int year = 1, int mouth = 1, int day = 1)
		:_year(year)
		, _mouth(mouth)
		, _day(day)
		,_t(4)
		,_a(a)
		,_b(2)
	{

	}


private:
	int _year;
	int _mouth;
	int _day;

	Time _t;
	int& _a;
	const int _b;
};
int main()
{
	int a = 0;
	Data d1(a);
	Time t1(12);
	t1.print();
	return 0;
}


//class A
//{
//public:
//	A(int a,int b)
//	:_a(a)
//	,_b(b)
//	{
//		
//	}
//
//	void print()const
//	{
//		cout << _a << " " << _b << endl;
//	}
//
//private:
//	int _a;
//	int _b;
//};
//
//
//int main()
//{    
//	//1构造⼀个A的临时对象，再⽤这个临时对象拷⻉构造aa1
//    // 编译器遇到连续构造+拷⻉构造->优化为直接构造 
//	A aa1 = { 1,2 };
//	aa1.print();
//	//因为类型转化时会产生临时对象所以要加const
//	const A& aa2 = { 3,4 };
//	aa2.print();
//	return 0;
//}

//class A
//{
//public:
//	A()
//	{
//		_sum++;
//	}
//
//	A(const A& a)
//	{
//		_sum++;
//	}
//
//	~A()
//	{
//		_sum--;
//	}
//
//	void fun()
//	{
//		//ret();
//	}
//
//	static int ret()
//	{
//		return _sum;
//		//没有this指针不能访问非静态变量
//		//_a++;
//	}
//private:
//	//不属于某个对象，属于整个类
//	static int _sum;//类里定义
//	int _a;
//};
//
//int A::_sum = 0;//类外初始化
//int main()
//{
//	//int A :: _sum = 0;静态成员的定义必须在全局作用域（即所有函数和类之外）。
//	cout << A::ret() << endl;
//	A aa1, aa2;
//	A aa3(aa1);
//	cout << A::ret() << endl;
//	cout << aa1.ret() << endl;
//
//	// 编译报错：error C2248: “A::_scount”: ⽆法访问 private 成员(在“A”类中声明) 
//    //cout << A::_scount << endl;
//
//	return 0;
//}
//class B;//缺少前向声明
//class A
//{
//public:
//	friend void print(const A& a, const B& b);
//private:
//	int _a;
//};
//
//class B
//{
//public:
//	friend void print(const A& a, const B& b);
//private:
//	int _b;
//};
//
//void print(const A& a, const B& b)
//{
//	cout << a._a << endl;
//	cout << b._b << endl;
//}


//class A
//{
//	// 友元声明 
//	friend class B;
//private:
//	int _a1 = 1;
//	int _a2 = 2;
//};
//class B
//{
//public:
//	void func1(const A& aa)
//	{
//		cout << aa._a1 << endl;
//		cout << _b1 << endl;
//	}
//	void func2(const A& aa)
//	{
//		cout << aa._a2 << endl;
//		cout << _b2 << endl;
//	}
//private:
//	int _b1 = 3;
//	int _b2 = 4;
//};
//int main()
//{
//	A aa;
//	B bb;
//	bb.func1(aa);
//	bb.func2(aa);
//	return 0;
//}

//class A
//{
//public:
//	class B
//	{
//	public:
//		void foo(const A& aa)
//		{
//			cout << aa._a << endl;
//			cout << aa._a1 << endl;
//		}
//	};
//	int _b;
//
//private:
//	int _a;
//	static int _a1;
//};
//
// int A::_a1 = 1;
//int main()
//{
//	A::B b;
//	A aa;
//	b.foo(aa);
//	return 0;
//}